この項では、この章で説明されているXLA関数で使用されるデータ型について説明します。これらのデータ型は、次のファイルで定義されています。
データ型
|
説明
|
---|---|
レコード・タイプについて記述します。XLAによって返されるレコードの先頭で使用されます。 |
|
更新レコードについて記述します。 |
|
XLAのステータス情報について記述します(ttXlaStatusによって返されます)。 |
|
XLAのリリース情報について記述します(ttXlaGetVersionによって返されます)。 |
|
表情報について記述します(ttXlaGetTableInfoによって返されます)。 |
|
列情報について記述します(ttXlaGetColumnInfoによって返されます)。 |
|
XLAブックマークで使用されるLSNポインタについて記述します。 |
XLAのほとんどのデータ型は、データのレコード・タイプおよび長さについて記述する標準ヘッダーで始まります。標準ヘッダーの型はttXlaNodeHdr_tです。
このヘッダーには、次のフィールドが含まれています。
フィールド | 型 | 説明 |
nodeType | char | レコードのタイプ。 |
byteOrder | char | レコードのバイト順序。 1 = ビッグ・エンディアン 2 = リトル・エンディアン |
length | SQLUINTEGER | すべての添付ファイルを含むレコードの全長。 |
ttXlaUpdateDesc_t構造体は、データ・ストア内の単一行(またはタプル)への更新処理について記述します。ttXlaNextUpdateまたはttXlaNextUpdateWait関数によって返される各更新レコードは、固定長ヘッダーttXlaUpdateDesc_tで始まり、その後に0(ゼロ)から2行のデータ・ストアからの行が続きます。行データはttXlaUpdateDesc_tヘッダーにレポートされたレコード・タイプによって異なります。
flagsフィールドは、レコード更新の特別なオプションのビットマップです。
connIDフィールドは、更新を開始したODBC接続ハンドルを識別します。この値を使用すると、更新が同一の接続から行われたかどうかを確認できます。
個別のコミットXLAレコードは、ttApplicationContextをコールした後にXLAレコードを生成する処理が行われない場合に生成されます。ttApplicationContextプロシージャについては、「アプリケーションのコンテキストの受渡し」を参照してください。
XLAは、次の通知を受信できません。
ALTER TABLE処理で生成可能なXLAレコードは、列の追加時または削除時に生成されるADDCOLSまたはDRPCOLSタイプ、あるいは列の一意の属性の変更時に生成されるCREAINDまたはDROPINDタイプのみです。
次に、ttXlaUpdateDesc_tによって定義される更新ヘッダーのフィールドを示します。
ttXlaTblDesc_tヘッダーの後には、更新レコードに含まれているデータが続きます。この項では、特定のSQL処理に関連した特別な更新レコードのデータ書式について説明します。
CREATE TABLEの場合、特別な行の値は、新しい表について記述するttXlaTblDesc_tレコードおよびその後に続く、各列について記述するttXlaColDesc_tレコードで構成されています。
ALTER TABLEの場合、特別な行の値は、ttXlaDropColumnTup_tまたはttXlaAddColumnTup_t値およびその後に続く、列について記述するttXlaColDesc_tレコードで構成されます。
DROP TABLE処理の場合、行の値は次のようになります。
TRUNCATE TABLE処理の場合、行の値は次のようになります。
CREATE INDEX処理の場合、行の値は次のようになります。
DROP INDEX処理の場合、行の値は次のようになります。
フィールド | 型 | 説明 |
tblName | char (31) | 索引が削除された表の名前。 |
tblOwner | char (31) | 索引が削除された表の所有者。 |
ixName | char (31) | 削除された索引の名前。 |
列の追加の場合、行の値は次のようになります。
この特別な行の後に、新しい列について記述するttXlaColDesc_tレコードが続きます。
列の削除の場合、行の値は次のようになります。
この特別な行の後に、削除された列について記述するttXlaColDesc_tレコードの配列が続きます。
CREATE SEQUENCE処理の場合、行の値は次のようになります。
DROP SEQUENCE処理の場合、行の値は次のようになります。
CREATE MATERIALIZED VIEW処理の場合、行の値は次のようになります。
フィールド | 型 | 説明 |
vwName | char (31) | マテリアライズド・ビューの名前。 |
vwOwner | char (31) | マテリアライズド・ビューの所有者。 |
sysTableID | SQLUBIGINT | SYS.TABLESに格納されたシステム表ID。 |
マテリアライズド・ビューに対するDROP VIEW処理の場合、行の値は次のようになります。
表ID設定処理の場合、更新レコードの主要部分で以前に割り当てられたアプリケーション表識別子を使用し、アプリケーション表識別子の新しい値を特別な行に指定するように記述されます。
列ID設定処理の場合、次の特別な行が記述されます。
フィールド | 型 | 説明 |
oldUserColID | SQLUINTEGER | 以前のユーザー定義の列ID値。 |
newUserColID | SQLUINTEGER | 新しいユーザー定義の列ID値。 |
sysColID | SQLUINTEGER | システム列ID。 |
表のレプリケーション・ステータスの変更の場合、次の特別な行が記述されます。
更新レコードを取得する手順およびttXlaUpdateDesc_tヘッダーの内容を確認する手順の詳細は、「トランザクション・ログからの更新レコードの取得」および「レコード・ヘッダーの確認および行アドレスの検出」を参照してください。次に、これらの手順の概要を示します。
更新ヘッダーの直後に行データが続きます。行データは、ttXlaGetColumnInfoによって返されるttXlaColDesc_t構造体に指定されているオフセットとともに内部形式で格納されます。
更新ヘッダーのサイズにそのアドレスを追加して、行データのアドレスを検出することができます。
次に例を示します。
char *Row = (char*)&ttXlaUpdateDesc_t + sizeof(ttXlaUpdateDesc_t);UPDATETUPレコードの場合、ttXlaUpdateDesc_tヘッダーの後に2行のデータが続きます。1つ目の行には更新前のデータ、2つ目の行には更新後のデータが含まれています。
新しい行は古い行の直後に続くため、古い行の長さ(tuple1)にそのアドレスを追加して、新しい行のアドレスを計算することができます。
次に例を示します。
char *oldRow = (char*)&ttXlaUpdateDesc_t + sizeof(ttXlaUpdateDesc_t); char *newRow = oldRow + ttXlaUpdateDesc_t.tuple1;返された行内の列データにアクセスする方法の詳細については、ttXlaColDesc_tを参照してください。
ttXlaStatus_t構造体では、XLAシステムに関する実行時処理情報が示されます。非永続モードでXLAを処理する場合、このデータ型はttXlaStatus関数によって返されます。
XLAを将来拡張できるように、バージョン・データ型ttXlaVersion_tに、現在のXLAのバージョンおよびデータ型のバイト順序が記述されています。このデータ型はttXlaGetVersion関数によって返されます。
このデータ型には、次のフィールドが含まれています。
表情報は、ttXlaTblDesc_tデータ型を使用して表現されます。このデータ型は、ttXlaGetTableInfo関数によって返されます。
このデータ型には、次のフィールドが含まれています。
インライン行のサイズには、すべての固定長列、NULL列フラグ、および可変長列のポインタ情報のためのスペースが含まれています。可変長列ごとに、4バイトのインライン行領域が使用されます。
表に宣言済の主キーがある場合は、次のようになります。
列情報は、ttXlaColDesc_tデータ型を使用して表現されます。このデータ型は、ttXlaGetColumnInfo関数によって返されます。
このデータ型には、次のフィールドが含まれています。
ttXlaColDesc_t構造体を取得する手順およびその内容を確認する手順の詳細は、「列データの確認」を参照してください。次に、これれらの手順の概要を示します。
ttXlaColDesc_t構造体は、ttXlaGetColumnInfo関数によって返されます。この構造体には、特定の表の列情報にアクセスするために必要なメタデータが格納されています。たとえば、offsetフィールドを使用すると、ttXlaUpdateDesc_t構造体の後の更新レコードに返された行(一行または複数行)の特定の列データを検出できます。列値のアドレスは、返された行のアドレスにoffsetを追加して検出することができます。その後、dataTypeフィールドに基づいてこの値を対応するC型にキャストしたり、「複合データ型の変換」で説明されている変換ルーチンの1つに渡すことができます。
TimesTenの行データは、固定長データおよびその後に続く可変長データで構成されます。
NULL値が含まれる可能性がある列の場合、nullOffsetはレコードのNULLバイトを指します。この値は、列がNULLの場合は1、NULLでない場合は0(ゼロ)になります。詳細は、「NULL値の検出」を参照してください。
flagsビットは、列がNULL値可能であるかどうか、主キーの一部となるかどうか、またはアウトラインで格納されるかどうかを定義します。
sysColNum値は、列に割り当てるシステム列番号です。この値は、最初の列に対しては1から始まります。
固定長列データの場合、列のアドレスは、ttXlaColDesc_t構造体のoffset値に行のアドレスを追加したものです。
ttXlaColDesc_t colDesc; void* pColVal = colDesc->offset + row;列の値は、データ型に対応する型ポインタを使用してこのポインタを参照解除すると取得できます。たとえば、SQL_INTEGERの場合、ODBC型はSQLINTEGERであるため、列の値は次のように入力すると取得できます。
*((SQLINTEGER*) pColVal))可変長列データの場合、前述の手順で計算されたpColValは4バイトのオフセット値のアドレスになります。このオフセット値をpColValのアドレスに追加すると、可変長列データの先頭を指すポインタが示されます。64ビットのプラットフォームで処理が行われると想定すると、この場所の最初の8バイトはこのデータの長さ(var_len)で、その後に実際のデータ(var_data)が続きます。
この例では、VARCHAR文字列をコピーおよび出力します。
tt_ptrint* var_len = (tt_ptrint*)((char*)pColVal + *((int*)pColVal)); char* var_data = (char*)(var_len+1); char *buffer = malloc(*var_len+1); memcpy(buffer,var_data,*var_len); buffer[*var_len] = (char)NULL; /* NULL terminate the string */ printf("%s\n",buffer); free(buffer);
ブックマークで使用されるLSNのポインタの記述です。このデータ型は、ttXlaUpdateDesc_t構造体によって使用されます。
ブックマークで使用されるLSNのポインタの記述です。このデータ型はttXlaGetLSN関数によって返され、ttXlaSetLSN関数によって使用されます。
checksumはXLAハンドル固有であり、すべてのLSNポインタが特定のXLA接続と関連付けられていることを保証します。
フィールド | 型 | 説明 |
checksum | SQLUINTEGER | 有効なLSNハンドルであることを保証するチェックサム。 |
xid | SQLUSMALLINT | トランザクションID。 |
LogFile | SQLUBIGINT | ログ・ファイル番号。 |
LogOffset | SQLUBIGINT | ログ・ファイル・オフセット。 |